package com.itheima.edu.manager.controller;

import com.itheima.edu.manager.domain.Teacher;
import com.itheima.edu.manager.service.TeacherService;

import java.util.Scanner;

public abstract class BaseTeacherController {
    //3.指挥业务员进行添加老师的业务处理
    private TeacherService servic = new TeacherService();

    //键盘录入
    public Scanner sc = new Scanner(System.in);

    public final void start() {

        while (true) {
            //展示二级菜单
            System.out.println("--------欢迎来到老师管理系统--------");
            System.out.println("1 添加老师");
            System.out.println("2 删除老师");
            System.out.println("3 修改老师");
            System.out.println("4 查看老师");
            System.out.println("5 退出");
            System.out.println("请输入您的选择:");
            int choice = sc.nextInt();

            switch (choice) {
                case 1:
                    //System.out.println("添加老师功能");
                    addTeacher();
                    break;
                case 2:
                    //System.out.println("删除老师功能");
                    deleteTeacher();
                    break;
                case 3:
                    //System.out.println("修改老师功能");
                    updateTeacher();
                    break;
                case 4:
                    //System.out.println("查看老师功能");
                    findAllStudent();
                    break;
                case 5:
                    System.out.println("感谢您的使用");
                    return; //退出当前方法返回一级菜单
                default:
                    System.out.println("您的数据有误!");
                    break;
            }
        }
    }

    //客服类中的修改学生功能
    public final void updateTeacher() {


        //1.拿到要修改的学生学号
        System.out.println("请输入要修改的老师工号:");
        String updateId = inputTeacherId(true);

        //2.拿到要修改的老师的信息
        Teacher newTea = inputTeacherInfo(updateId);

        //4.指挥业务员进行修改学生的业务处理
        boolean result = servic.updateTeacher(updateId, newTea);
    }

    //客服类中的删除老师功能
    public final void deleteTeacher() {
        //1.让用户输入要删除的学生学号
        System.out.println("请输入要删除的学生学号:");
        String deleteId = sc.next();
        //2.指挥业务员删除业务
        boolean result = servic.deleteTeacher(deleteId);
        //3.给出删除结果提示信息
        if (result) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败,请确保要删除的学生学号存在!");
        }
    }

    //客服类中的查看老师功能
    public final void findAllStudent() {
        Teacher[] teat = servic.findAllStudent();

        if (teat != null) {
            //1.展示数据之前,先展示表头数据
            System.out.println("工号" + "\t\t" + "姓名" + "\t" + "年龄" + "\t生日");
            //1.1遍历容器,展示老师信息
            for (int i = 0; i < teat.length; i++) {
                //拿到每一个老师信息
                Teacher tea = teat[i];
                //输出当前学生信息
                if (tea != null) {
                    System.out.println(tea.getId() + "\t" + tea.getName() + "\t" + tea.getAge() + "\t\t" + tea.getBirthday());
                }
            }
        } else {
            //没有数据,提示当前系统无数据,请添加后重试!
            System.out.println("当前系统无数据,请添加后重试!");
        }
    }

    //客服类中的添加老师功能
    public final void addTeacher() {
        //键盘录入用户输入的数据
        System.out.println("请输入老师的工号:");
        String id = inputTeacherId(false);

        //2.调用方法键盘录入老师信息,封装老师对象
        Teacher tea = inputTeacherInfo(id);

        //3. 指挥业务员进行添加老师的业务处理
        boolean result = servic.addTeacher(tea);

        //4.根据业务员返回的结果组织对应的展示信息给用户
        if (result) {
            System.out.println("添加成功!");
        } else {
            System.out.println("添加失败!");
        }
    }

    //抽取一个方法,用于键盘录入老师信息,封装老师对象并返回
    public abstract Teacher inputTeacherInfo(String id);

    //抽取一个方法,专门用来做键盘录入工号并返回一个可用工号
    //flag: 方法的开关 : true :表示希望的到一个存在的工号. false:表示希望的到一个不存在的工号
    private String inputTeacherId(boolean flag) {
        String id;
        while (true) {
            id = sc.next();
            //对当前录入的工号进行唯一性把控
            //指挥业务员校验本次录入的工号是否存在
            boolean exists = servic.isExists(id);
            if (exists == flag) {
                break;
            } else {
                System.out.println("当前工号已存在,请重新录入");
            }
        }
        //返回工号
        return id;
    }
}
